(p7)br.sptk.many vmx_dispatch_reflection; \
br.sptk.many dispatch_to_fault_handler
+#ifdef CONFIG_VMX_PANIC
GLOBAL_ENTRY(vmx_panic)
br.sptk.many vmx_panic
;;
END(vmx_panic)
-
+#endif
VMX_SAVE_REST
mov rp=r14
;;
+ P6_BR_CALL_PANIC(.Lvmx_dispatch_reflection_string)
adds out4=16,r12
br.call.sptk.many b6=vmx_reflect_interruption
END(vmx_dispatch_reflection)
VMX_SAVE_EXTRA
mov rp=r14
;;
+ P6_BR_CALL_PANIC(.Lvmx_dispatch_virtualization_fault_string)
adds out1=16,sp //regs
br.call.sptk.many b6=vmx_emulate
END(vmx_dispatch_virtualization_fault)
movl r14=ia64_leave_hypervisor
;;
mov rp=r14
+ P6_BR_CALL_PANIC(.Lvmx_dispatch_vexirq_string)
br.call.sptk.many b6=vmx_vexirq
END(vmx_dispatch_vexirq)
VMX_SAVE_REST
mov rp=r14
;;
+ P6_BR_CALL_PANIC(.Lvmx_dispatch_tlb_miss_string)
adds out2=16,r12
br.call.sptk.many b6=vmx_hpw_miss
END(vmx_dispatch_tlb_miss)
VMX_SAVE_REST
mov rp=r14
;;
+ P6_BR_CALL_PANIC(.Lvmx_dispatch_break_fault_string)
adds out1=16,sp
br.call.sptk.many b6=vmx_ia64_handle_break
;;
add out1=16,sp // pass pointer to pt_regs as second arg
br.call.sptk.many b6=ia64_handle_irq
END(vmx_dispatch_interrupt)
+
+.Lvmx_dispatch_reflection_string:
+ .asciz "vmx_dispatch_reflection\n"
+.Lvmx_dispatch_virtualization_fault_string:
+ .asciz "vmx_dispatch_virtualization_fault\n"
+.Lvmx_dispatch_vexirq_string:
+ .asciz "vmx_dispatch_vexirq\n"
+.Lvmx_dispatch_tlb_miss_string:
+ .asciz "vmx_dispatch_tlb_miss\n"
+.Lvmx_dispatch_break_fault_string:
+ .asciz "vmx_dispatch_break_fault\n"
* r11 = FPSR_DEFAULT
* r12 = kernel sp (kernel virtual address)
* r13 = points to current task_struct (kernel virtual address)
+ * p6 = (psr.vm || isr.ni)
+ * panic if not external interrupt (fault in xen VMM)
* p15 = TRUE if psr.i is set in cr.ipsr
* predicate registers (other than p2, p3, and p15), b6, r3, r14, r15:
* preserved
* we can pass interruption state as arguments to a handler.
*/
+#ifdef CONFIG_VMX_PANIC
+# define P6_BR_VMX_PANIC (p6)br.spnt.few vmx_panic;
+#else
+# define P6_BR_VMX_PANIC /* nothing */
+#endif
+
+#define P6_BR_CALL_PANIC(panic_string) \
+(p6) movl out0=panic_string; \
+(p6) br.call.spnt.few b6=panic;
+
#define VMX_DO_SAVE_MIN(COVER,SAVE_IFS,EXTRA) \
mov r27=ar.rsc; /* M */ \
mov r20=r1; /* A */ \
;; \
(pUStk) tbit.nz.and p6,p0=r18,IA64_ISR_NI_BIT; \
;; \
-(p6)br.spnt.few vmx_panic; \
+ P6_BR_VMX_PANIC \
(pUStk)VMX_MINSTATE_GET_CURRENT(r1); \
/* mov r21=r16; */ \
/* switch from user to kernel RBS: */ \